package app.auto.designer.tool;

import android.util.Xml;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlSerializer;

import java.io.IOException;
import java.io.StringWriter;

/**
 * Created by hp on 2018/2/22.
 */

//{
//        "views": [{
//        "views": [],
//        "attr": [{
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_width"
//        },
//        {
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_height"
//        },
//        {
//        "value": "center",
//        "type": "string",
//        "name": "layout_gravity"
//        },
//        {
//        "value": "10dp",
//        "type": "dimen",
//        "name": "layout_margin"
//        },
//        {
//        "value": "250dp",
//        "type": "dimen",
//        "name": "minWidth"
//        },
//        {
//        "value": "menu 01",
//        "type": "string",
//        "name": "text"
//        }],
//        "widget": "Button"
//        },
//        {
//        "views": [],
//        "attr": [{
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_width"
//        },
//        {
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_height"
//        },
//        {
//        "value": "center",
//        "type": "string",
//        "name": "layout_gravity"
//        },
//        {
//        "value": "10dp",
//        "type": "dimen",
//        "name": "layout_margin"
//        },
//        {
//        "value": "250dp",
//        "type": "dimen",
//        "name": "minWidth"
//        },
//        {
//        "value": "menu 02",
//        "type": "string",
//        "name": "text"
//        }],
//        "widget": "Button"
//        },
//        {
//        "views": [],
//        "attr": [{
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_width"
//        },
//        {
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_height"
//        },
//        {
//        "value": "center",
//        "type": "string",
//        "name": "layout_gravity"
//        },
//        {
//        "value": "10dp",
//        "type": "dimen",
//        "name": "layout_margin"
//        },
//        {
//        "value": "250dp",
//        "type": "dimen",
//        "name": "minWidth"
//        },
//        {
//        "value": "menu 03",
//        "type": "string",
//        "name": "text"
//        }],
//        "widget": "Button"
//        },
//        {
//        "views": [],
//        "attr": [{
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_width"
//        },
//        {
//        "value": "wrap_content",
//        "type": "dimen",
//        "name": "layout_height"
//        },
//        {
//        "value": "center",
//        "type": "string",
//        "name": "layout_gravity"
//        },
//        {
//        "value": "10dp",
//        "type": "dimen",
//        "name": "layout_margin"
//        },
//        {
//        "value": "250dp",
//        "type": "dimen",
//        "name": "minWidth"
//        },
//        {
//        "value": "menu 04",
//        "type": "string",
//        "name": "text"
//        }],
//        "widget": "Button"
//        }],
//        "attr": [{
//        "value": "match_parent",
//        "type": "dimen",
//        "name": "layout_width"
//        },
//        {
//        "value": "match_parent",
//        "type": "dimen",
//        "name": "layout_height"
//        },
//        {
//        "value": "vertical",
//        "type": "string",
//        "name": "orientation"
//        }],
//        "widget": "LinearLayout"
//        }

public class Json2XML {
    public String xml;

    public static String json2xml(String json, StringWriter outputstream) {
        boolean wnull = false;
        if(outputstream == null){
            outputstream = new StringWriter();
            wnull = true;
        }
        XmlSerializer serializer = Xml.newSerializer();
        try {
            serializer.setOutput(outputstream);
            serializer.startDocument("UTF-8", true);

            JSONObject group = new JSONObject(json);
            recurxml(serializer, group);
            serializer.endDocument();
            serializer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        if(wnull){
            return outputstream.toString();
        }
        return "";
    }

    private static void recurxml(XmlSerializer serializer, JSONObject group) throws JSONException, IOException {
        for (int i = 0; i < group.length(); i++) {
            String widget = group.getString("widget");
            serializer.startTag(null, widget);
            JSONArray properties = group.getJSONArray("properties");
            if (properties.length() > 0) {
                for (int a = 0; a < properties.length(); a++) {

                    JSONObject prop = (JSONObject) properties.get(a);
                    String value = prop.get("value").toString();
                    String type = prop.get("type").toString();
                    String name = prop.get("name").toString();
                    if (name.contains("android.widget")) {
                        name = name.replace("android.widget", "");
                    }
                    serializer.attribute(null, "android:" + name, value);
                }

            }
            if (group.has("views")) {

                JSONArray array = group.getJSONArray("views");
                if (array.length() > 0) {
                    for (int a = 0; a < array.length(); a++) {
                        recurxml(serializer, (JSONObject) array.get(a));
                    }

                }
            }
            serializer.endTag(null, widget);
        }

    }

}
